﻿using System;

////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////	A STAR NODE
///////////////////////////////////////////////////////////////////////////////////////////

class AStarNode : System.Object
{
	public enum E_AStarFlags
	{
		Unchecked = 0,  // 未检查：节点尚未被探索过
        Open = 1,       // 开放列表：节点已被发现，但尚未处理（待检查）
        Closed = 2,     // 关闭列表：节点已被处理（不再检查）
        NotPassable = 3,// 不可通行：节点代表障碍物或不可达区域
    }

	public AStarNode()
	{
		NodeID = -1;
		G = 0;
		H = 0;
		F = float.MaxValue;

		Flag = E_AStarFlags.Unchecked;
	}

	public short NodeID;

    /// <summary>
    /// 实际代价（G 值）
	/// 从起点（Start）走到当前节点的实际花费（路径总代价）。
	/// 通常是距离、执行时间、资源消耗等的累计值。
    /// </summary>
    public float G;

    /// <summary>
    /// 启发代价（H 值）
	/// 从当前节点估算到目标节点的“剩余代价”（heuristic estimate）。
	/// 比如两状态之间的差异数量、曼哈顿距离等。
    /// </summary>
    public float H;

    /// <summary>
    /// 总代价（F = G + H）
	/// A* 的优先级依据，表示从起点到目标经过此节点的估计总花费。
	/// A* 会优先扩展 F 值最小的节点。
    /// </summary>
    public float F;
	public AStarNode Next;
	public AStarNode Previous;
	public AStarNode Parent;

    /// <summary>
    /// 节点状态标志
	/// 表示当前节点在 A* 搜索过程中的状态（如未检查、开放、关闭、不可通行）。
    /// </summary>
    public E_AStarFlags Flag;


};
